package gobelinmaker.data;

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;

/**
 * Kanava szerver által futtatható formátuma.
 *
 * @author imruf84
 */
public class CompiledKanava extends LinkedList<HolePath> {

    /**
     * Kezdő elemek száma.
     */
    private int elementsCount = 0;

    /**
     * Rendezés az öltések száma szerint növekvő sorrendbe.
     */
    public void sort() {
        Collections.sort(this, new Comparator<HolePath>() {
            @Override
            public int compare(HolePath t, HolePath t1) {
                return t.size() - t1.size();
            }
        });

        // Indexek megadása.
        for (int i = 0; i < this.size(); i++) {
            HolePath hp = this.get(i);
            hp.index = i;

            for (int j = 0; j < hp.size(); j++) {
                hp.get(j).index = j;
            }

        }
    }

    /**
     * Teljes elemszám tárolása.
     *
     * @return tárolt teljes elemszám
     */
    public int storeTotalCount() {

        this.elementsCount = this.getTotalCount();

        return this.elementsCount;
    }

    /**
     * Tárolt elemszám lekérdezése.
     *
     * @return tárolt teljes elemszám
     */
    public int getStoredTotalCount() {
        return this.elementsCount;
    }

    /**
     * Lyukak számának a lekérdezése.
     *
     * @return lyukak száma
     */
    public int getTotalCount() {

        int result = 0;

        for (HolePath hp : this) {
            result += hp.size();
        }

        return result;
    }

    @Override
    public void clear() {
        super.clear();
        this.storeTotalCount();
    }

    @Override
    public String toString() {
        String result = "";

        for (HolePath hp : this) {
            result = result.concat(hp.getColor().getSymbol() + ":" + hp.toString() + "\n");
        }

        return result.substring(0, result.length() - 1);
    }
}
